package com.fx.ruankao.service;

import com.fx.ruankao.entity.ExamPaper;
import java.util.List;

/**
 * 试卷服务接口
 */
public interface ExamPaperService {
    
    /**
     * 新增试卷
     * @param examPaper 试卷实体
     * @return 受影响的行数
     */
    int insert(ExamPaper examPaper);
    
    /**
     * 根据ID删除试卷
     * @param id 试卷ID
     * @return 受影响的行数
     */
    int deleteById(Integer id);
    
    /**
     * 更新试卷
     * @param examPaper 试卷实体
     * @return 受影响的行数
     */
    int update(ExamPaper examPaper);
    
    /**
     * 根据ID查询试卷
     * @param id 试卷ID
     * @return 试卷实体
     */
    ExamPaper selectById(Integer id);
    
    /**
     * 查询所有试卷
     * @return 试卷列表
     */
    List<ExamPaper> selectAll();
    
    /**
     * 根据试卷名称查询试卷
     * @param title 试卷名称
     * @return 试卷列表
     */
    List<ExamPaper> selectByTitle(String title);
    
    /**
     * 根据科目查询试卷
     * @param subject 科目
     * @return 试卷列表
     */
    List<ExamPaper> selectBySubject(String subject);
    
    /**
     * 根据状态查询试卷
     * @param status 状态
     * @return 试卷列表
     */
    List<ExamPaper> selectByStatus(Integer status);
    
    /**
     * 批量删除试卷
     * @param ids 试卷ID数组
     * @return 受影响的行数
     */
    int batchDelete(Integer[] ids);
    
    /**
     * 更新试卷状态
     * @param id 试卷ID
     * @param status 状态
     * @return 是否更新成功
     */
    boolean updateStatus(Integer id, Integer status);
    
    /**
     * 查询试卷数量
     * @return 试卷数量
     */
    int countPapers();
    
    /**
     * 根据条件统计试卷数量
     * @param subject 科目（可选）
     * @param status 状态（可选）
     * @return 试卷数量
     */
    int countPapersByCondition(String subject, Integer status);
    
    /**
     * 根据创建者ID查询试卷
     * @param userId 创建者ID
     * @return 试卷列表
     */
    List<ExamPaper> selectByCreator(Integer userId);
    
    /**
     * 根据角色ID查询试卷
     * @param roleId 角色ID
     * @return 试卷列表
     */
    List<ExamPaper> selectByRoleId(Integer roleId);
    
    /**
     * 根据科目统计试卷数量
     * @param subject 科目
     * @return 试卷数量
     */
    int countBySubject(String subject);
}